NestJS で DI してもらう時は Type-Only Import を使ってはいけない
NestJS では DI してもらいたいサービスのコンストラクタに欲しいサービスを引数を書くだけで自動的に必要な依存が注入される
code:someService.ts
import { Injectable } from '@nestjs/common'
import { HogeService } from './hoge.service'
import { PiyoService } from './piyo.service'
@Injectable()
export class SomeService() {
constructor(
private readonly hoge: HogeService,
private readonly piyo: PiyoSerivce,
) {}
public doSomething() {
this.hoge.something()
const poge = this.piyo.something
}
}
code:someService.ts
import type { HogeService } from './hoge.service' // とか
import { type PiyoService } from './piyo.service' // 新しく増えた記法とか
しかし Type-Only Import だとサービスをうまく解決できず、DI に失敗する。
というのも、Type-Only Import は tsc がコンパイル時に eliminate してしまうので import 文が残らず、結果としてどのサービスを要求していたのか分からなくなってしまう。
確かに、__decorate の paramtypes が滅茶苦茶になりそう
ちなみに rokoucha.icon はこれに気付かず1時間ぐらい発狂しました♪